Introduction

Transform theory is a powerful tool employed by scientists [Oberhettinger and Badii 1973], mathematicians [Churchill 1958], and engineers [Lathi 1983; Muth 1978; Oppenheim and Schafer 1989]. One important use of this theory is to transform equations involving integrals and derivatives into algebraic equations that are easier to solve. The solutions to the original equations are obtained by inverse transforming the algebraic solutions. This is the case when the Laplace transform is applied to linear differential equations with constant coefficients, or when the z-transform is applied to linear difference equations with constant coefficients.

This process is one of the staples of <#50#>signal processing<#50#>, the area of engineering that deals with the design and analysis of systems that act on signals in prescribed ways. A <#51#>signal<#51#> is essentially a function of one or more variables; often, in the one-variable case, the variable is time. The variable can be continuous (for an <#1139#>analog signal<#1139#>), or discrete (for a <#1140#>digital<#1140#>, or <#1141#>sampled<#1141#>, signal). Thus a / discrete-time signal is a finite or infinite sequence of values, or <#1142#>samples<#1142#>.

A <#1143#>system<#1143#> is a mathematical operator that transforms one signal into another, according to characteristic rules. <#1144#>Filters<#1144#>, or time-invariant linear systems, form a particularly important class of systems, eminently suited to the application of transform methods. A filter is characterized by a function, its <#1145#>impulse response<#1145#>, in terms of which the filter's action on any signal can be determined. The output signal is the <#1146#>convolution<#1146#> of the input signal with the filter's impulse response; the operation of convolution involves an integral for continuous signals and a summation for discrete ones. Using transforms, one can reduce the task of convolving these two functions to that of multiplying two algebraic expressions---~~the functions' transforms---~~and then inverse transforming the product.

For an example of analog system design, consider the transmission of AM radio signals. Each AM radio station broadcasts at a specific frequency f0 which is between 550 kHz and 1600 kHz and is a multiple of 10 kHz [Lathi 1983]. In order to avoid overlap with other stations, a station must transmit its signal between the frequencies f0 - 5 kHz and f0 + 5 kHz. Before transmission, a station filters its signal so that frequencies above 5 kHz are rejected and frequencies below 5 kHz are passed. This filtered signal is then shifted by f0 in the frequency domain and transmitted. The entire design and analysis of this system can be carried out in the frequency domain:~ the Laplace transform would be used for the design and implementation of the 5 kHz low-pass filter, and the Fourier transform would be used to analyze the transmission system.

By contrast, digital signal processing (DSP) deals with discrete-time signals (sequences) and systems that act on them [Oppenheim and Schafer 1989]. Primarily, digital signals come from sampling and quantizing analog signals. In many cases, implementing a system in digital hardware is faster, more flexible, and more cost-effective than building it from analog components. One reason for this is that increasing precision in discrete systems is as simple as adding bits, whereas more expensive components may be required in analog systems. Another reason is that the time to prototype a system is often shorter for discrete systems. Apart from that, some DSP operators, like those that alter the sampling rate, have little meaning in the continuous domain, and may be very difficult to implement with analog components.

The most commonly used transforms in DSP are the z-transform, the discrete-time Fourier transform (DTFT) and the discrete Fourier transform (DFT). Just as the Laplace transform is a generalization of the Fourier transform, the z-transform is a generalized form of the DTFT. The z-transform is most useful in the implementation of digital filters as digital hardware or programs for DSP chips, while the DTFT is preferred when the frequency-domain characteristics of a system must be defined.

Neither digital nor analog signal processing is confined to a single dimension. Many spatial array and imaging applications require two- and / processing. This is the case for detecting edges in monochrome digital images, or finding angles of arrival with an array of sensors. A digitized image can be thought of as a function defined on an #math200#N×M grid, where each grid square is assigned an intensity value known as a grey level (usually a positive integer). In such a digitized image, human eyes perceive an edge as a sharp transition between grey levels in adjacent regions. Such a sharp transition gives rise to high-frequency components in the image. Therefore, filtering the image to boost its high-frequency components and decrease its low-frequency components would sharpen edges in the image. This operation on the image is a / high-pass filter; it corresponds to convolution in the / ``time'' domain.

Digital signal processing has always been tied closely to computer implementations, where the signals are viewed as a stream of numbers. The machine provides an efficient way to compute the DSP operator that transforms one stream of numbers into another. On the other hand, the design of a signal processing system treats the signals as functions (in the mathematical sense).

Over the last decade, special attention has been devoted by several researchers to the field of symbolic signal processing [Kopec 1980, 1985; Myers 1986; Covell 1989]. In symbolic processing, the signal is represented in a computer as a formula, rather than as a sequence of numbers. Thus, the value of a signal might only be known in terms of a formula, instead of a number. In a similar manner, signal processing operators, the building blocks for systems, are maintained in symbolic form. This enables a machine to simplify, rearrange, and rewrite symbolic expressions until they take a desired form. For example, the desired form might be an optimal implementation of an expression in which the number of additions and multiplications is minimized.

The remainder of this paper describes a set of packages that provide a general platform for implementing symbolic transforms in / and that represent a first step toward the building of a comprehensive signal processing environment in <#1147#>Mathematica<#1147#>. The packages are divided into three groups, corresponding to the contexts 1, 2 and 3. (Loading either of the last two automatically causes the first to load as well.) Each of the next three sections focuses on one of these groups of packages [Evans, 1990; Evans, 1992]. The remaining section describes the Notebooks that accompany the packages [Evans, 1991].